package cn.wolfcode.web.controller.util;

import cn.wolfcode.util.JsonResult;
import com.alibaba.fastjson.JSON;
import org.apache.shiro.authz.UnauthorizedException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.method.HandlerMethod;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

// 处理控制器的异常
@ControllerAdvice
public class CRMExceptionHandler {
    // 捕获运行时异常
    @ExceptionHandler(RuntimeException.class)
    public String handleException(RuntimeException ex, HandlerMethod handlerMethod, HttpServletResponse response) throws ServletException, IOException {
        // 打印异常信息
        ex.printStackTrace();
        // 判断执行的方法是否是ajax的方法(有没贴@ResponseBody)
        if (handlerMethod.hasMethodAnnotation(ResponseBody.class)) {
            // 如果是,则响应jsonresult
            JsonResult json = new JsonResult(false, "操作失败,请联系管理员!");
            // 设置响应数据类型和编码
            response.setContentType("application/json;charset=utf-8");
            // 使用response对象响应数据(json字符串)
            response.getWriter().print(JSON.toJSONString(json));
            return null;// 不找视图
        }
        // 如果不是,则返回错误视图
        return "common/error"; // 返回提示的错误视图
    }

    // 捕获权限异常
    @ExceptionHandler(UnauthorizedException.class)
    public String handleUnauthorizedException(RuntimeException ex, HandlerMethod handlerMethod, HttpServletResponse response) throws ServletException, IOException {
        // 打印异常信息
        ex.printStackTrace();
        // 判断执行的方法是否是ajax的方法(有没贴@ResponseBody)
        if (handlerMethod.hasMethodAnnotation(ResponseBody.class)) {
            // 如果是,则响应jsonresult
            JsonResult json = new JsonResult(false, "没有权限,请联系管理员!");
            // 设置响应数据类型和编码
            response.setContentType("application/json;charset=utf-8");
            // 使用response对象响应数据(json字符串)
            response.getWriter().print(JSON.toJSONString(json));
            return null;// 不找视图
        }
        // 返回提示权限的视图
        return "common/nopermission";
    }

}
